package k3_IO.p2_fileStream.demo03;

import java.io.*;
import java.util.ArrayList;
import java.util.TreeMap;

/**
 * 行号是不连续的 行数是任意多个的  按行号排序显示
 * 6.你说你的程序叫简单，我说我的代码叫诗篇
 * 1.一想到你我就哦豁豁豁豁豁豁豁豁豁豁....哦个头啊，完全不理人家受得了受不了
 * 8.Just 简单你和我 ，Just 简单程序员
 * 3.约了地点却忘了见面 ，懂得寂寞才明白浩瀚
 * 5.沉默是最大的发言权
 * 2.总是喜欢坐在电脑前， 总是喜欢工作到很晚
 * 7.向左走 又向右走，我们转了好多的弯
 * 4.你从来就不问我，你还是不是那个程序员
 */
public class SortString {

    /**
     * 使用ArrayList实现排序
     */
    public static void sortByList() throws Exception{

        ArrayList<String> lineList = new ArrayList<>();

        BufferedReader br = new BufferedReader(new FileReader("E://line.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("E://lineNew.txt"));

        String line = "";
        while((line=br.readLine())!=null){
            lineList.add(line);
        }

        //按照每行的行号的数字形式进行排序
        lineList.sort((line1,line2) -> {
            int line1Num = Integer.parseInt(line1.split("\\.")[0]);
            int line2Num = Integer.parseInt(line2.split("\\.")[0]);

            return line1Num-line2Num;
        });

        //把排序后的内容写出到新文件中
        lineList.stream()
                .forEach(lineNew->{
                    try {
                        bw.write(lineNew);
                        bw.newLine();
                    }catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                });

        bw.close();
        br.close();
    }

    /**
     * 使用TreeMap实现排序
     */
    public static void sortByMap() throws Exception{

        TreeMap<Integer,String> lineMap = new TreeMap<>();

        BufferedReader br = new BufferedReader(new FileReader("E://line.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("E://lineNew1.txt"));

        String line = "";
        while((line=br.readLine())!=null){
            String[] fields = line.split("\\.",2);
            lineMap.put(Integer.parseInt(fields[0]),fields[1]);
        }

        lineMap.forEach((k,v)->{
            try {
                bw.write(k+"."+v);
                bw.newLine();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });

        bw.close();
        br.close();
    }

    public static void main(String[] args) throws Exception {

//        SortString.sortByList();
        SortString.sortByMap();

    }

}
